// Copyright (c) 2020 Presto Labs Pte. Ltd.
// Author: daniel

#pragma once

#include <memory>
#include <string_view>

namespace coin2::exchange::base::api_base::fix {
class IFixTradeClient;
}

namespace coin2::exchange::base::market {
struct MarketExchangeApi;
}

namespace coin2::exchange::order {
class OrderConnectionConfig;
}

namespace coin2::exchange::base::order {

/********************************************************************************
 * class FixTradeClientMgr                                                      *
 ********************************************************************************/
class FixTradeClientMgr {
 public:
  using FixTradeClientPtr = std::unique_ptr<coin2::exchange::base::api_base::fix::IFixTradeClient>;
  using MarketExchangeApi = coin2::exchange::base::market::MarketExchangeApi;
  using OrderConnectionConfig = coin2::exchange::order::OrderConnectionConfig;

  static bool Enabled(const MarketExchangeApi&);
  static FixTradeClientPtr Create(const MarketExchangeApi&, const OrderConnectionConfig&);
};

}  // namespace coin2::exchange::base::order
